package com.seminario.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.seminario.model.Usuario;
import com.seminario.util.HibernateUtil;

public class UsuarioDao {
	
	public void agregarUsuario(Usuario usuario){
		Transaction trns = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            trns = session.beginTransaction();
            session.save(usuario);
            session.getTransaction().commit();
        } catch (RuntimeException e) {
            if (trns != null) {
                trns.rollback();
            }
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }		
	}
	
	public void borrarUsuario(String idU) {
        Transaction trns = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            trns = session.beginTransaction();
            Usuario user = (Usuario) session.load(Usuario.class, new String(idU));
            session.delete(user);
            session.getTransaction().commit();
        } catch (RuntimeException e) {
            if (trns != null) {
                trns.rollback();
            }
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
    }
	
	public void actualizarUsuario(Usuario user) {
        Transaction trns = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            trns = session.beginTransaction();
            session.update(user);
            session.getTransaction().commit();
        } catch (RuntimeException e) {
            if (trns != null) {
                trns.rollback();
            }
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
    }
	
	public List<Usuario> getAllUsers() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
        	usuarios = session.createQuery("from Usuario").list();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return usuarios;
    }

    public Usuario getUserById(String idU) {
        Usuario usuario = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            String queryString = "from Usuario where id = :id";
            Query query = session.createQuery(queryString);
            query.setString("id", idU);
            usuario = (Usuario) query.uniqueResult();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return usuario;
    }	
}
